class Person ( id )
  ssn := id;
  alwaysReturnOneHundred := proc() return 100 end;
  overrideReturnValue := proc() return 1 end
end;

class Student ( id ) : Person
  overrideReturnValue := proc() return 2 end;
  specialValue := proc() return 17 end
end;

class GradStudent ( id ) : Student
  overrideReturnValue := proc() return 42 end
end;


class Teacher ( id ) : Person
  overrideReturnValue := proc() return 3 end;
  specialValue := proc() return 2343 end
end;


person := Person(1234);
personOneHundred := person.alwaysReturnOneHundred();
personOverride := person.overrideReturnValue();

student := Student(5678);
studentOneHundred := student.alwaysReturnOneHundred();
studentOverride := student.overrideReturnValue();
studentSpecial := student.specialValue();

teacher := Teacher(999);
teacherOneHundred := teacher.alwaysReturnOneHundred();
teacherOverride := teacher.overrideReturnValue();
teacherSpecial := teacher.specialValue();

gradStudent := GradStudent(111);
gradOneHundred := gradStudent.alwaysReturnOneHundred();
gradOverride := gradStudent.overrideReturnValue();
gradSpecial := gradStudent.specialValue()